package cate.game.role.res.guild.po.treasurehouse;

import cate.common.table.d.GDFunc;
import cate.common.table.d.GDGuild;
import cate.common.util.TimeTool;
import cate.game.notice.NoticeParam;
import cate.game.role.Role;
import cate.game.role.res.guild.GuildFuncBase;
import cate.game.role.res.guild.po.GuildPO;
import cate.game.role.res.guild.po.treasurehouse.msg.GuildTreasureLogResp;
import easy.java.dev.note.NoteClass;
import easy.java.dev.note.NoteField;

import java.util.ArrayList;
import java.util.List;

@NoteClass("公会宝库日志")
public class GuildTreasureLogPO extends GuildFuncBase {
    @NoteField("日志列表")
    public List<GuildTreasureChangeLog> logs;

    @Override
    public void initialize(GuildPO guild) {
        super.initialize(guild);
        if (logs == null) {
            logs = new ArrayList<>();
        }
    }

    @Override
    public int getFuncId() {
        return GDFunc.GuildFunc.TREASURE_HOUSE;
    }

    /**
     * 跨天
     */
    public void onDaySpan() {
        synchronized (this) {
            //过七天删除
            logs.removeIf(item -> TimeTool.getDistanceDays(item.recordTime, System.currentTimeMillis()) > GDGuild.TreasureHouse.LOG_EXPIRED_DAY);
        }
        noticeOnline();
    }

    /**
     * 添加日志
     */
    public void addLog(NoticeParam param) {
        synchronized (this) {
            logs.add(0, new GuildTreasureChangeLog(System.currentTimeMillis(), param));
        }
        // 通知在线玩家有新的日志
        noticeOnline();
    }

    /**
     * 日志列表通知-对单个玩家
     */
    public void noticeUpdate(Role role) {
        role.sendNow(new GuildTreasureLogResp(this));
    }

    /**
     * 日志列表通知-公会所有在线
     */
    private void noticeOnline() {
        funcDependent.guild.noticeOnline(this::noticeUpdate);
    }
}
